

using System;

namespace PolePosition.v3.EntityLibrary
{
    /// <summary>
	/// Defines the properties of a(n) ReportsProject Entity and
	/// contains its methods and constructors.
	/// </summary>
	/// <remarks><para>Initial Generation Date: Friday, April 03, 2009.</para>
	/// <para>A ReportsProject Entity is an object that can be used to hold all the data necessary to
	/// create new ReportsProject records in the database or to hold the data from an existing 
	/// ReportsProject record.
	/// </para>
	/// <para>ReportsProject Entities have three kinds of properties:
	/// <list type="bullet">
	/// <item>Column properties: These properties hold the actual data values that will be stored in 
	/// the database (or the data from an existing record). Thus, a ReportsProject Entity will have
	/// one property for each column in the ReportsProject table, with the same name and data type 
	/// as the column in the table.<para></para>
	/// Column properties are not simple class members. Instead, they are rich 
	/// objects that, besides holding a data value, have properties that contain information about themselves,
	/// like whether there is a value stored in them or whether the values have changed. See the 
	/// <see cref="ProjectCommon.Helpers.PropertyHelper&lt;PropertyDataType&gt;" /> for more.
	/// </item>
	/// <item>Metadata properties: These are properties that expose information about the Entity
	/// as a whole, for example, whether it was created from an existing record or not (the <c>IsNew</c>
	/// property). They are an indication of the Entity's status, which determines how it will be
	/// treated by its Factory. Continuing with the previous example, if an Entity's <c>IsNew</c> property
	/// is <c>true</c>, then the Factory knows that it has to create a new database record for the values
	/// in it.<para></para>
	/// Matadata properties are present in all Entities, and are defined in the 
	/// <see cref="ProjectCommon.Interfaces.ICustomEntity" /> interface to provide a standardized
	/// way to manipulate the Entities.
	/// </item>
	/// <item>Child Collection properties: These properties are designed to hold collections of
	/// Entities that contain additional or supporting data for the ReportsProject Entity. The Entities
	/// represent data from tables associated with ReportsProject Entity's table through Foreign Key
	/// relationships. The collections are generic, as defined in the 
	/// <see cref="ProjectCommon.Generics.EntityCollection&lt;EntityType&gt;" /> class,
	/// and so can contain additional ReportsProject Entities or any other type of Entity.
	/// For example, a Loan Entity may contain a child collection where an additional Loan Entity,
	/// representing a second loan on a property, is stored. It could also have a collection of Property
	/// Entities, Borrower Entities, etc.<para></para>
	/// Since not all Entity types have the need for supporting data, ReportsProject Entity may not
	/// have any Child Collection properties. The presence of these properties is determined by two
	/// factors: first, whether ReportsProject Entity's originating table contains Foreign Keys, and
	/// second, whether the code generation tool used to build these files was instructed to create 
	/// Child Collection properties for the data that those Foreign Keys refer to.
	/// </item>
	/// </list></para>
	/// <para>
	/// The class contains constructors that allow it to be used both to create new records or to 
	/// load existing ones from the database, as well as methods that allow it to be cloned, 
	/// compared, and converted to XML format, among others.
	/// </para>
	/// <para>
	/// Note however, that a <c>ReportsProjectEntity</c> object is disconnected and unaware of its
	/// context, therefore it relies on its <see cref="Classes.Factories.ReportsProjectFactory" />
	/// for interaction.
	/// </para>
	/// </remarks>
	public sealed partial class ReportsProjectEntity 
	{
		// custom code here
	}
}
